简易聊天软件开发(python+socket) |
您所在的位置:网站首页 › 聊天软件 源代码 › 简易聊天软件开发(python+socket) |
python软件开发一个聊天软件,了解一下,最初的聊天实现方式,本次用到socket编程,及多线程技术,测试开发入门小玩意,没事玩一玩,还是可以的。 话不多说,直接上代码: 一、1V1聊天代码实现:创建两个文件,sock_server.py和sock_client.py文件: 1.1 sock_server.py import socket # 创建socket对象 sk=socket.socket() # 连接服务器ip及商品 sk.connect(('127.0.0.1',9999)) # 向服务器发送信息,需要先转换格式【encode('utf-8'))】,才能被服务器识别 sen_data=input('输入要发送的内容:') sk.sendall(sen_data.encode('utf-8')) # 接收来自服务器的信息,接收到信息并非是字节,所以需要解码才能被正常识别 ser_data=sk.recv(1024).decode('utf-8') print('接收到的服务端数据:',ser_data) # 断开连接 sk.close() 1.2 sock_client.py import socket # 定义服务器ip、端口 ip_ad=('127.0.0.1',9999) # 创建socket对象 sk=socket.socket() # 绑定ip端口 sk.bind(ip_ad) # 开启监听 sk.listen() print('服务器已经开启......') # 等待接收客户端信息 conn,addr=sk.accept() print('客户端地址:',addr) # 等待接收客户端信息,接收到信息并非是字节格式,所以需要解码才能被正常识别【decode('utf-8')】 cli_data=conn.recv(1024).decode('utf-8') print('接收到的客户端数据:',cli_data) # 发送信息给客户端,发送的信息非字节格式,需要先转换格式【encode('utf-8'))】 sen_data=input('输入要发送的内容:') conn.sendall(sen_data.encode('utf-8')) # 断开连接 sk.close() 1.3 运行 1.3.1 初始状态分别运行服务器和客户端代码: 服务器 客户端 1.3.2 客户端发送消息,服务器接收消息客户端 服务器 1.3.3 服务器回复消息,客户端接收消息服务器 客户端 一对一方式,发送一条消息,回复一条消息。enter键结束一条消息发送 二、多用户跟服务器聊天分别创建三个文件:server.py、A_client.py、B_client.py 2.1 server.py import socketserver # 1. 继承一个类 class sqServer(socketserver.BaseRequestHandler): def handle(self) -> None: print('小可爱们,聊天服务器已上线......') while True: # 接收客户端数据 client_data=self.request.recv(1024) print(client_data.decode('utf-8')) # 发送消息给客户端 send_data=input('请输入内容:') self.request.sendall(send_data.encode('utf-8')) self.request.close() # 2. 创建服务 server=socketserver.ThreadingTCPServer(('127.0.0.1',7777),sqServer) # 3. 保持在线 server.serve_forever() 2.2 A_client.py import socket # 创建socket对象 sk=socket.socket() # 连接服务器ip及商品 sk.connect(('127.0.0.1',7777)) while True: # 向服务器发送信息,需要先转换格式【encode('utf-8'))】,才能被服务器识别 send_data='A: '+input('输入要发送的内容:') sk.sendall(send_data.encode('utf-8')) # 接收来自服务器的信息,接收到信息并非是字节,所以需要解码才能被正常识别 server_data=sk.recv(1024).decode('utf-8') print('接收到的服务端数据:',server_data) # 断开连接 sk.close() 2.3 B_client.py import socket # 创建socket对象 sk=socket.socket() # 连接服务器ip及商品 sk.connect(('127.0.0.1',7777)) while True: # 向服务器发送信息,需要先转换格式【encode('utf-8'))】,才能被服务器识别 send_data='B: '+input('输入要发送的内容:') sk.sendall(send_data.encode('utf-8')) # 接收来自服务器的信息,接收到信息并非是字节,所以需要解码才能被正常识别 server_data=sk.recv(1024).decode('utf-8') print('接收到的服务端数据:',server_data) # 断开连接 sk.close() 2.4 运行分别运行三个文件,并且实现交互,查看最后结果: 2.4.1 初始状态服务器: A用户: B用户: 2.4.2 A和B分别向服务器发送消息,服务器接收到消息A用户 B用户: 服务器接收: 2.4.3 服务器回复消息,A和B收到消息服务器回复 A收到的服务器消息 B收到的服务器消息 可以看到,多用户对服务器发起聊天,服务器会根据用户发送的时间先后,进行优先回复,并不需要指定A或B。而且,服务器回复完后,可以继续发送消息,此时,如果A先回复,则服务器刚发送的消息立即回复A。 可能有点绕,练下手,就知道了。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |